package it.dija.burraco;

import it.dija.burraco.Torneo.ModalitaCompagni;
import it.dija.burraco.Torneo.ModalitaSesso;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.*;

import javax.swing.JOptionPane;

public class Burraco {

	public static void main(String[] args) {

		
		Torneo t;
		
		
		t = new Torneo();
		t.creaGiocatoriTest(11);
//		t.setListaGiocatori(creaGiocatori());
//		t.stampaListaGiocatori();
		
		t.setRegolaSesso(ModalitaSesso.TuttiControTutti);
		t.setRegolaCompagni(ModalitaCompagni.Mai);
		t.setLimiteRipetiCoppia(1);
		t.setLimiteRipetiAvversario(3);
		t.setLimiteRipetiTavolo(3);
		t.setLimiteRipetiInTavoloZoppoDa2(1);
		
		int nPartite = 5;

		while (t.getListaPartite().size() < nPartite) {
			
			Partita p = t.NuovaPartita();
			
			p.generaTavoli(true);
			
			//System.out.println();
			//System.out.println("Partita: " + t.getListaPartite().size());
			//p.stampaListaCoppie();
			//p.stampaListaTavoli();
			//System.out.print(".");
			
		}
		
		for (int i = 0; i<t.getListaPartite().size(); i++) {
			System.out.println();
			System.out.println("Partita: " + (i+1));
			t.getListaPartite().get(i).stampaListaTavoli();
		}
		System.out.println();
		
		for (int i=0; i<t.getListaGiocatori().size(); i++) {
			t.getListaGiocatori().get(i).stampaCompagniAvversari();
		}
				
		scriviFile(t, "torneo");
		
		
		
		/*
		t = (Torneo)leggiDaFile("torneo");
		
		
		for (int i=0; i<t.getListaPartite().size(); i++) {
			Partita p = t.getListaPartite().get(i);

			p.stampaListaCoppie();
		}
		
		for (int i = 0; i<t.getListaPartite().size(); i++) {
			System.out.println();
			System.out.println("Partita: " + (i+1));
			t.getListaPartite().get(i).stampaListaTavoli();
		}
		System.out.println();
		
		for (int i=0; i<t.getListaGiocatori().size(); i++) {
			t.getListaGiocatori().get(i).stampaCompagniAvversari();
		}
		*/
		//System.out.println();
		
		//p.generaTavoli(true);
		//p.stampaListaTavoli();
		
	}
	
	
	
	
	public static LinkedList<Giocatore> creaGiocatori() {
		LinkedList<Giocatore> giocatori = new LinkedList<Giocatore>();
		
/*		giocatori.add(new Giocatore("Melli     ", "Matteo    ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Barbieri  ", "Marika    ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Melli     ", "Gianni    ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Gandolfi  ", "Loretta   ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Bigi      ", "Paolo     ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Ferretti  ", "Enrica    ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Bervini   ", "Lucio     ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Melli     ", "Teresa    ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Bettati   ", "Antonio   ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Giacobazzi", "Claudia   ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Ferrari   ", "Enzo      ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Denti     ", "Giuseppina", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Setti     ", "Claudio   ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Borghi    ", "AnnaMaria ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore("Bettati   ", "Gianni    ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore("Rossi     ", "Angela    ", Sesso.SessoFemminile));
		
		giocatori.add(new Giocatore(" ", "Matteo   ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Marika   ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Gianni   ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Loretta  ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Paolo    ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Enrica   ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Lucio    ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Teresa   ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Antonio  ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Claudia  ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Enzo     ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Giuse    ", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Claudio  ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "AnnaMaria", Sesso.SessoFemminile));
		giocatori.add(new Giocatore(" ", "Gia-Bet  ", Sesso.SessoMaschile));
		giocatori.add(new Giocatore(" ", "Angela   ", Sesso.SessoFemminile));
*/		
		giocatori.get(0).setCompagno(giocatori.get(1));
		giocatori.get(1).setCompagno(giocatori.get(0));
		giocatori.get(2).setCompagno(giocatori.get(3));
		giocatori.get(3).setCompagno(giocatori.get(2));
		giocatori.get(4).setCompagno(giocatori.get(5));
		giocatori.get(5).setCompagno(giocatori.get(4));
		giocatori.get(6).setCompagno(giocatori.get(7));
		giocatori.get(7).setCompagno(giocatori.get(6));
		giocatori.get(8).setCompagno(giocatori.get(9));
		giocatori.get(9).setCompagno(giocatori.get(8));
		giocatori.get(10).setCompagno(giocatori.get(11));
		giocatori.get(11).setCompagno(giocatori.get(10));
		giocatori.get(12).setCompagno(giocatori.get(13));
		giocatori.get(13).setCompagno(giocatori.get(12));
		giocatori.get(14).setCompagno(giocatori.get(15));
		giocatori.get(15).setCompagno(giocatori.get(14));
		
		return giocatori;
	}
	
	
	public static String nomeFile = "giocatori.bur";
	
	public static boolean scriviFile(Object obj) {
		return scriviFile(obj, nomeFile);
	}
	
	public static boolean scriviFile(Object obj, String filename) {
		FileOutputStream fout;
		ObjectOutputStream os;
		
		try {
			fout = new FileOutputStream(filename);
			os = new ObjectOutputStream(fout);
			os.writeObject(obj);
			os.flush();
			os.close();
		}
		catch (IOException e) {
			JOptionPane.showMessageDialog(null, "Errore nel salvataggio:\n" + e.toString(), "JVS | Errore", JOptionPane.ERROR_MESSAGE);
			return false;
		}
		
		return true;
	}
	

	public static Object leggiDaFile() {
		return leggiDaFile(nomeFile);
	}
	/*
	 * Metodo per leggere l'elenco dei giocatori dal file
	 */
	public static Object leggiDaFile(String filename) {
		
		Object lista;
		
		FileInputStream fin;
		ObjectInputStream is;
				
		
		try {
			fin = new FileInputStream(filename);
			is = new ObjectInputStream(fin);
			
		}
		catch (FileNotFoundException e) {
			return null;
		}
		catch (IOException e) {
			
			JOptionPane.showMessageDialog(null, "Errore 2\n"+e.getMessage(), "JVS | Errore", JOptionPane.ERROR_MESSAGE);
			return null;
			
		}
		
		
		try {
			lista = is.readObject();			
		}
		catch (ClassCastException e) {
			JOptionPane.showMessageDialog(null, "Errore nel File", "JVS | Errore", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		catch (IOException e) {
			
			JOptionPane.showMessageDialog(null, "Errore 4\n"+e.getMessage(), "JVS | Errore", JOptionPane.ERROR_MESSAGE);
			return null;
			
		}
		catch (ClassNotFoundException e) {
			JOptionPane.showMessageDialog(null, "Errore 0\n"+e.getMessage(), "JVS | Errore", JOptionPane.ERROR_MESSAGE);
			return null;
		}
		
		
		return lista;
		
	}


}
